#ifndef RPC_MPRPC_CONTROLLER_H
#define RPC_MPRPC_CONTROLLER_H

#include <string>
#include "google/protobuf/service.h"  // 依赖protobuf的Service框架

namespace rpc {

/**
 * @brief RPC控制器，用于管理RPC调用的状态（错误、超时等）
 * 实现google::protobuf::RpcController接口，适配protobuf的RPC框架 Mp:muduo + protobuf
 */
class MprpcController : public google::protobuf::RpcController {
public:
    MprpcController();

    /**
     * @brief 重置控制器状态，用于复用控制器对象
     */
    void Reset() override;

    /**
     * @brief 检查RPC调用是否失败
     * @return 失败返回true，成功返回false
     */
    bool Failed() const override;

    /**
     * @brief 获取失败原因
     * @return 失败原因的字符串描述
     */
    std::string ErrorText() const override;

    /**
     * @brief 设置RPC调用失败及原因
     * @param reason 失败原因描述
     */
    void SetFailed(const std::string& reason) override;

    /**
     * @brief 取消RPC调用（可选实现，简化版可空实现）
     * 标记调用为 “已取消”，并触发预注册的回调（NotifyOnCancel）。
     */
    void StartCancel() override;

    /**
     * @brief 检查调用是否被取消（可选实现）
     * @return 始终返回false（简化版）
     */
    bool IsCanceled() const override;

    /**
     * @brief 注册取消回调（可选实现，简化版可空实现）
     * 如清理网络连接、通知上层模块
     */
    void NotifyOnCancel(google::protobuf::Closure* callback) override;

private:
    bool m_failed;                  // RPC调用是否失败
    std::string m_error_text;       // 失败原因
};

}  // namespace rpc

#endif  // RPC_MPRPC_CONTROLLER_H
